package subraSoft.fenix.gui.reparaciones.modificacion;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.util.List;

import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

import org.netbeans.validation.api.ui.ValidationPanel;

import subraSoft.centaurus.gui.components.CenDateCheckBox;
import subraSoft.centaurus.gui.option.CenOption;
import subraSoft.centaurus.gui.util.CenComponentValueUtil;
import subraSoft.centaurus.model.cobj.CenDefaultCObj;
import subraSoft.fenix.model.cliente.cobj.FenClienteCObj;
import subraSoft.fenix.model.cliente.service.FenClienteService;
import subraSoft.fenix.model.cliente.service.impl.FenClienteServiceImpl;
import subraSoft.fenix.model.reparacion.cobj.FenReparacionCObj;
import subraSoft.fenix.model.reparacion.service.FenReparacionService;
import subraSoft.fenix.model.reparacion.service.impl.FenReparacionServiceImpl;

public class FenReparacionOption extends CenOption {

	private JTextField idTfl, equipoTfl, serieTfl, marcaTfl, 
		precioTfl;
	private JTextArea pedidoTxa, realizadoTxa, observacionesTxa, accesoriosTxa;
	private CenDateCheckBox fechaCreacionDfl, 
		fechaFinalizacionDfl, fechaEntregaDfl;
	private FenClienteChooserController clienteChooser;
	
	private FenReparacionService service = new FenReparacionServiceImpl();
	
	public FenReparacionOption()
	{

		ValidationPanel task1 = new ValidationPanel();
		JPanel panel1 = new JPanel( new GridBagLayout() );
		task1.setInnerComponent(panel1);
		
		// CREACION DE COMPONENTES
		idTfl = new JTextField(20);
		idTfl.setEnabled(false);
		
		equipoTfl = new JTextField(20);
		serieTfl = new JTextField(20);
		marcaTfl = new JTextField(20);
		precioTfl = new JTextField(20);
		
		fechaCreacionDfl = new CenDateCheckBox(false);
		fechaEntregaDfl = new CenDateCheckBox(false);
		fechaFinalizacionDfl = new CenDateCheckBox(false);
		
		pedidoTxa = new JTextArea(3,6);
		realizadoTxa = new JTextArea(3,6);
		realizadoTxa = new JTextArea(3,6);
		observacionesTxa = new JTextArea(3,6);
		accesoriosTxa = new JTextArea(2,6);
	
		clienteChooser = new FenClienteChooserController();
		
		// LAYOUT
		GridBagConstraints c = new GridBagConstraints();
		c.insets = new Insets(3,3,3,3);
		c.anchor = GridBagConstraints.WEST;
		c.fill = GridBagConstraints.HORIZONTAL;
		c.weightx = 100;
		
		// UBICACION Y LABELS
	    int fila = 0;
	    int col = 0;
	    { // FILA 1
	    	c.gridy = fila++;
	    	c.gridx = col++;
			panel1.add(new JLabel("Id"), c);
			
			idTfl.setName("Id");
			c.gridx = col++;
			panel1.add(idTfl, c);
			
			c.gridx = col++;
			panel1.add(new JLabel("Cliente"), c);
			
			clienteChooser.getValidationComponent().setName("Cliente");
			c.gridx = col++;
			panel1.add(clienteChooser, c);
			
			c.gridx = col++;
			panel1.add(new JLabel("Equipo"), c);
			
			equipoTfl.setName("Equipo");
			c.gridx = col++;
			panel1.add(equipoTfl, c);
	    }
		
	    col = 0;
	    { // FILA 2
			c.gridy = fila++;
			c.gridx = col++;
			panel1.add(new JLabel("Marca"), c);
			
			marcaTfl.setName("Marca");
			c.gridx = col++;
			panel1.add(marcaTfl, c);
			
			c.gridx = col++;
			panel1.add(new JLabel("Precio"), c);
			
			precioTfl.setName("Precio");
			c.gridx = col++;
			panel1.add(precioTfl, c);
			
			c.gridx = col++;
			panel1.add(new JLabel("Serie"), c);
			
			serieTfl.setName("Serie");
			c.gridx = col++;
			panel1.add(serieTfl, c);
			
	    }
	    
	    col = 0;
	    { // FILA 3
	    	c.gridy = fila++;
	    	c.gridx = col++;
			panel1.add(new JLabel("Fecha Creacion"), c);
			
			fechaCreacionDfl.setName("Fecha Creacion");
			c.gridx = col++;
			panel1.add(fechaCreacionDfl, c);
			
			c.gridx = col++;
			panel1.add(new JLabel("Fecha Finalizacion"), c);
			
			fechaFinalizacionDfl.setName("Fecha Finalizacion");
			c.gridx = col++;
			panel1.add(fechaFinalizacionDfl, c);
			
			c.gridx = col++;
			panel1.add(new JLabel("Fecha Entrega"), c);
			
			fechaEntregaDfl.setName("Fecha Entrega");
			c.gridx = col++;
			panel1.add(fechaEntregaDfl, c);
	    }
	    
	    col = 0;
	    { // FILA 5
	    	c.gridwidth = 6;
	    	c.gridy = fila++;
	    	c.gridx = col++;
			panel1.add(new JLabel("Accesorios"), c);
			
			accesoriosTxa.setName("Accesorios");
			c.gridx = col++;
			panel1.add(new JScrollPane(accesoriosTxa), c);
	    }
	    
	    col = 0;
	    { // FILA 4
	    	c.gridwidth = 6;
	    	c.gridy = fila++;
	    	c.gridx = col++;
			panel1.add(new JLabel("Pedido"), c);
			
			pedidoTxa.setName("Pedido");
			c.gridx = col++;
			panel1.add(new JScrollPane(pedidoTxa), c);
	    }
	    
	    col = 0;
	    { // FILA 5
	    	c.gridwidth = 6;
	    	c.gridy = fila++;
	    	c.gridx = col++;
			panel1.add(new JLabel("Realizado"), c);
			
			realizadoTxa.setName("Realizado");
			c.gridx = col++;
			panel1.add(new JScrollPane(realizadoTxa), c);
	    }
	    
	    col = 0;
	    { // FILA 6
	    	c.gridwidth = 6;
	    	c.gridy = fila++;
	    	c.gridx = col++;
			panel1.add(new JLabel("Observaciones"), c);
			
			observacionesTxa.setName("Observaciones");
			c.gridx = col++;
			panel1.add(new JScrollPane(observacionesTxa), c);
	    }

		addTask(task1);
	}
	
	@Override
	public void execute() {
		
		FenReparacionCObj rep = new FenReparacionCObj();
		
		rep.setId(CenComponentValueUtil.getLong(idTfl));
		rep.setAccesorios(CenComponentValueUtil.getString(accesoriosTxa));
		rep.setEquipo(CenComponentValueUtil.getString(equipoTfl));
		rep.setFechaCreacion(fechaCreacionDfl.getDate());
		rep.setFechaFinalizacion(fechaFinalizacionDfl.getDate());
		rep.setFechaEntrega(fechaEntregaDfl.getDate());
		rep.setMarca(CenComponentValueUtil.getString(marcaTfl));
		rep.setObservaciones(CenComponentValueUtil.getString(observacionesTxa));
		rep.setPedido(CenComponentValueUtil.getString(pedidoTxa));
		rep.setPrecio(CenComponentValueUtil.getDouble(precioTfl));
		rep.setRealizado(CenComponentValueUtil.getString(realizadoTxa));
		rep.setSerie(CenComponentValueUtil.getString(serieTfl));
		rep.setIdCliente((Long) clienteChooser.getSelectedItem().getId());
		service.saveOrUpdate(rep);
	}

	@Override
	public void initOption(List<CenDefaultCObj> data) 
	{
		FenReparacionCObj rep = (FenReparacionCObj)(data.get(0));
		
		// LLENAR CAMPOS
		CenComponentValueUtil.set(idTfl, rep.getId());
		CenComponentValueUtil.set(equipoTfl, rep.getEquipo());
		CenComponentValueUtil.set(serieTfl, rep.getSerie());
		CenComponentValueUtil.set(marcaTfl, rep.getMarca());
		CenComponentValueUtil.set(accesoriosTxa, rep.getAccesorios());
		CenComponentValueUtil.set(precioTfl, rep.getPrecio());
		CenComponentValueUtil.set(pedidoTxa, rep.getPedido());
		CenComponentValueUtil.set(realizadoTxa, rep.getRealizado());
		CenComponentValueUtil.set(observacionesTxa, rep.getObservaciones());
		CenComponentValueUtil.set(fechaCreacionDfl, rep.getFechaCreacion());
		CenComponentValueUtil.set(fechaFinalizacionDfl, rep.getFechaFinalizacion());
		CenComponentValueUtil.set(fechaEntregaDfl, rep.getFechaEntrega());
		
		FenClienteService cliServ = new FenClienteServiceImpl();
		FenClienteCObj cobj = cliServ.getClienteById( rep.getIdCliente() );
		clienteChooser.setSelectedItem(cobj);
	}

	@Override
	public String validateTask(int selectedIndex) {
		return null;
	}

	@Override
	public String validateOption() {
		// TODO Auto-generated method stub
		return null;
	}
}
